<?php
class Categorias {
  private $id_categoria;
  private $id_categoria_pai;
  private $nome;
  private $descricao;
  
  public function __construct($sFiltro = "", $sOrdem = "id_categoria") {
    global $oDB;
    $sSQL = "SELECT id_categoria, id_categoria_pai, nome, descricao FROM categorias";
    if ($sFiltro) {
      $sSQL .= " WHERE ($sFiltro)";
    }
    if ($sOrdem) {
      $sSQL .= " ORDER BY $sOrdem";
    }
    if (!empty($sFiltro)) {
      $oRes = $oDB->Execute($sSQL);
      if ($oRes == false) {
        trigger_error($oDB->ErrorMsg());
      } else {
        $this->id_categoria = $oRes->fields['id_categoria'];
        $this->id_categoria_pai = $oRes->fields['id_categoria_pai'];
        $this->nome = $oRes->fields['nome'];
        $this->descricao = $oRes->fields['descricao'];
      }
    }
  }
  
  public function getId_categoria() {
    return $this->id_categoria;
  }
  public function setId_categoria($valor) {
    $this->id_categoria = $valor;
  }
  
  public function getId_categoria_pai() {
    return $this->id_categoria_pai;
  }
  public function setId_categoria_pai($valor) {
    $this->id_categoria_pai = $valor;
  }
  
  public function getNome() {
    return $this->nome;
  }
  public function setNome($valor) {
    $this->nome = $valor;
  }
  
  public function getDescricao() {
    return $this->descricao;
  }
  public function setDescricao($valor) {
    $this->descricao = $valor;
  }
  
  public function atualizar() {
    global $oDB;
    $campos = array(
      'id_categoria_pai' => $this->id_categoria_pai,
      'nome' => $this->nome,
      'descricao' => $this->descricao,
    );
    if ($this->id_categoria > 0) {
      $oDB->AutoExecute('categorias', $campos, 'UPDATE', 'id_categoria = '.intval($this->id_categoria));
    } else {
      $oDB->AutoExecute('categorias', $campos, 'INSERT');
    }
  }
  public function excluir($aIds) {
    global $oDB;
    $sIds = implode(',', $aIds);
    $sSQL = 'DELETE FROM categorias WHERE id_categoria IN ('. $sIds .')';
    $oRes = $oDB->execute($sSQL);
    if ($oRes != false) {
      return true;
    }
  }
  public static function listar($filtro = "", $sOrdem = "id_categoria") {
    global $oDB;
    $lista = array();
    $sSQL = "SELECT id_categoria, id_categoria_pai, nome, descricao FROM categorias";
    if ($filtro) {
      $sSQL .= " WHERE ($filtro)";
    }
    if ($sOrdem) {
      $sSQL .= " ORDER BY $sOrdem";
    }
    $oRes = $oDB->Execute($sSQL);
    if ($oRes == false) {
      trigger_error($oDB->ErrorMsg());
    } else {
      while (!$oRes->EOF) {
        $linha = new self();
        $linha->id_categoria = $oRes->fields['id_categoria'];
        $linha->id_categoria_pai = $oRes->fields['id_categoria_pai'];
        $linha->nome = $oRes->fields['nome'];
        $linha->descricao = $oRes->fields['descricao'];
        $lista[] = $linha;
        
        $oRes->MoveNext();
      }
    }
    return $lista;
  }


  public function montaArvoreCategorias(){
    global $oDB;

    // Array das categorias.
    $aCategorias = array();


    // Adiciona um filho a arvore de categorias
    function adicionaFilho($iId_pai, &$iNivelAtual){
      global $oDB;
      global $aCategorias;

      $iNivelAtual++;

      $sSQL = "SELECT * FROM categorias WHERE id_categoria_pai = ". $iId_pai ." ORDER BY nome ASC";
      $oRes = $oDB->execute($sSQL);

      if($oRes->recordCount() > 0){
        while(!$oRes->EOF){
          $aCategorias[$oRes->fields['id_categoria']]['nome'] = $oRes->fields['nome'];
          $aCategorias[$oRes->fields['id_categoria']]['descricao'] = $oRes->fields['descricao'];
          $aCategorias[$oRes->fields['id_categoria']]['id_categoria_pai'] = (int)$iId_pai;
          $aCategorias[$oRes->fields['id_categoria']]['nivel'] = $iNivelAtual;
          adicionaFilho($oRes->fields['id_categoria'], $iNivelAtual);
          $oRes->MoveNext();
        }
        $iNivelAtual--;
      } else {
        $iNivelAtual--;
      }
    }

    $sSQL = "SELECT * FROM categorias WHERE id_categoria_pai IS NULL ORDER BY nome ASC";

    $oRes = $oDB->execute($sSQL);
    $iNivel = 0;
    while(!$oRes->EOF){
      global $aCategorias;

      $aCategorias[$oRes->fields['id_categoria']]['nome'] = $oRes->fields['nome'];
      $aCategorias[$oRes->fields['id_categoria']]['descricao'] = $oRes->fields['descricao'];
      $aCategorias[$oRes->fields['id_categoria']]['id_categoria_pai'] = null;
      $aCategorias[$oRes->fields['id_categoria']]['nivel'] = 0;
      adicionaFilho($oRes->fields['id_categoria'], $iNivel);
      $oRes->MoveNext();
    }
    return $aCategorias;
  }
  
}
?>
